package top.jacktgq.oop

/**
 @Author CandyWall
 @Date 2021/4/27--23:21
 @Description groovy面向对象编程：
                1. groovy中默认都是public
                2. 无论直接 .属性还是调用get/set最终都是调用get/set方法
 */
def person = new Person(name: '空条承太郎', age: 17)
println person
person.increaseAge(10)
println person

println person.cry()

// 为Person类动态的添加一个属性
Person.metaClass.sex = 'male'
def person2 = new Person(name: '空条承太郎', age: 17)
println person2.sex
person2.sex = 'female'
println person2.sex

// 为Person类动态的添加一个方法
Person.metaClass.sexUpperCase = {
    -> sex.toUpperCase()
}
def person3 = new Person(name: '空条承太郎', age: 17)
println person3.sexUpperCase()

// 为Person类动态的添加一个静态方法
Person.metaClass.static.createPerson = {
    String name, int age -> new Person(name: name, age: age)
}
def person4 = Person.createPerson('空条承太郎', 17)
println person4
